package br.com.pguide.activity;

import java.util.ArrayList;

import org.json.JSONException;
import org.json.JSONObject;

import br.com.pguide.R;
import br.com.pguide.estrutura.Item;
import br.com.pguide.parser.Parser;
import br.com.pguide.utils.Mensagem;
import br.com.pguide.webservice.WebService;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class PesquisaActivity extends Activity {
	
	boolean[] categorias_marcadas;
	boolean[] criterios_marcados;
	
	ArrayList<Item> itens = null;
	String username;
	EditText nome;
	String codigo_de_barras;
	public static final int BUSCA_BARCODE = 1;
	public static final int BUSCA_QRCODE = 2;
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.pesquisa);
		
		Intent it = getIntent();
		username = it.getStringExtra("username");
		Button button = (Button) findViewById(R.id.button4);
		button.setVisibility(View.GONE);
	}
	
	public void busca_por_nome(View view) {
		AlertDialog.Builder dialog = new AlertDialog.Builder(this);
		dialog.setTitle(R.string.pesquisar_produtos);
		dialog.setMessage(R.string.mensagem_busca_nome);
		nome = new EditText(this);
		dialog.setView(nome);
		dialog.setPositiveButton(getString(R.string.pesquisar), new OnClickListener() {
			public void onClick(DialogInterface dialog, int which) {
				pesquisarItem(nome.getText().toString());
			}
		});
		dialog.setNegativeButton(getString(R.string.cancelar), null);
		dialog.show();
	}
	
	public void busca_por_codigo(View view) {
		Intent intent = new Intent("com.google.zxing.client.android.SCAN");
		intent.putExtra("com.google.zxing.client.android.SCAN.SCAN_MODE", "QR_CODE_MODE");
		startActivityForResult(intent, BUSCA_BARCODE);
	}
	
	public void busca_lista(View view) {
		Intent it = new Intent(this, ListaDeResultadosBuscaItem.class);
		it.putExtra("id_item", -1);
		it.putExtra("username", username);
		startActivity(it);
	}
	
	public void busca_por_estabelecimentos(View view) {
		AlertDialog.Builder dialog = new AlertDialog.Builder(this);
		dialog.setTitle(R.string.pesquisar_estabelecimentos);
		dialog.setMessage(R.string.mensagem_busca_estabelecimento);
		nome = new EditText(this);
		dialog.setView(nome);
		dialog.setPositiveButton(getString(R.string.pesquisar), new OnClickListener() {
			public void onClick(DialogInterface dialog, int which) {
				pesquisarEstabelecimento(nome.getText().toString());
			}
		});
		dialog.setNegativeButton(getString(R.string.cancelar), null);
		dialog.show();
	}
	
	public void busca_por_promocoes(View view) {
		Intent it = new Intent(this, ListaDeResultadosBuscaItem.class);
		it.putExtra("username", username);
		it.putExtra("id_item", -2);
		it.putExtra("buscaOfertas", true);
		startActivity(it);
	}
	
	
	public void pesquisarEstabelecimento(String search) {
		Intent it = new Intent(this, ListaDeEstabelecimentosActivity.class);
		it.putExtra("nome_estabelecimento", search);
		it.putExtra("username", username);
		startActivity(it);
	}
	
	
	public void pesquisarItem(String search) {
		String resultados = WebService.pesquisar("alezyoliveira@msn.com", search);
		itens = Parser.busca_por_item(resultados);
		// TODO lista de resultados
		setNewIntent(itens);
	}
	
	public void setNewIntent(ArrayList<Item> itens){
		Intent it = new Intent(this, ListaDeResultadosDaBusca.class);
		ArrayList<String> nomes = new ArrayList<String>();
		ArrayList<Integer> categorias = new ArrayList<Integer>();
		ArrayList<String> tamanhos = new ArrayList<String>();
		ArrayList<String> marcas = new ArrayList<String>();
		ArrayList<Integer> unidades = new ArrayList<Integer>();
		ArrayList<Integer> ids = new ArrayList<Integer>();
		
		for (int i=0; i<itens.size(); i++) {
			nomes.add(itens.get(i).getNome());
			tamanhos.add(itens.get(i).getTamanho());
			marcas.add(itens.get(i).getMarca());
			unidades.add(itens.get(i).getUnidade_de_medida());
			categorias.add(itens.get(i).getCategoria());
			ids.add(itens.get(i).getID());
		}
		it.putExtra("username", username);
		it.putExtra("nomes", nomes);
		it.putExtra("categorias", categorias);
		it.putExtra("tamanhos", tamanhos);
		it.putExtra("marcas", marcas);
		it.putExtra("unidades", unidades);
		it.putExtra("ids", ids);
		startActivity(it);
	}
	
	public void onActivityResult(int requestCode, int resultCode, Intent intent) {
	    if (requestCode == BUSCA_BARCODE || requestCode == BUSCA_QRCODE) {
	        if (resultCode == RESULT_OK) {
	            this.codigo_de_barras = intent.getStringExtra("SCAN_RESULT").toString();
	            //String format = intent.getStringExtra("SCAN_RESULT_FORMAT");

	            codeParser(this.codigo_de_barras, requestCode);
	            // Handle successful scan
	        } else if (resultCode == RESULT_CANCELED) {
	            // Handle cancel
	            inserirBarcodeManualmente();
	        }
	    }
	}
	
	private void inserirBarcodeManualmente() {
		AlertDialog.Builder dialog = new AlertDialog.Builder(this);
		dialog.setTitle(R.string.inserir_manualmente);
		dialog.setMessage(R.string.inserir_barcode_manualmente);
		nome = new EditText(this);
		dialog.setView(nome);
		dialog.setPositiveButton(R.string.buscar, new OnClickListener() {
			public void onClick(DialogInterface dialog, int which) {
				codeParser(nome.getText().toString(), BUSCA_BARCODE);
			}
		});
		dialog.setNegativeButton(R.string.cancelar, null);
		dialog.show();
	}
	
	private void codeParser(String codigo, int tipo) {
		if (tipo == BUSCA_BARCODE) {
			///////////////////////////////////
			Mensagem.exibirToastCurto("Resultado da busca por BARCODE: " + codigo, this);
			buscar(codigo);
		} else if (tipo == BUSCA_QRCODE) {
			try {
				JSONObject jobject = new JSONObject(codigo);
				String barcode = jobject.getString("barcode");
				///////////////////////////////////
				Mensagem.exibirToastCurto("Resultado da busca por barcode no QRCODE: " + barcode, this);
				buscar(barcode);
			} catch (JSONException j) {
				Mensagem.exibirMensagem(j.getMessage(), this);
			}
		}
	}
    
	private void buscar (String barcode) {
		int id_item = -1;
		Item item = null;
		
		try {
			id_item = Parser.get_item_id( WebService.get_item_id(username, barcode) );
			item = Parser.get_item( WebService.get_item(username, id_item) );
		} catch (Exception e) {
			Mensagem.exibirMensagem(e.getMessage().toString(), this);
			return;
		}
		
		ArrayList<String> nomes = new ArrayList<String>();
		ArrayList<String> marcas = new ArrayList<String>();
		ArrayList<Integer> categorias = new ArrayList<Integer>();
		ArrayList<String> tamanhos = new ArrayList<String>();
		ArrayList<Integer> unidades = new ArrayList<Integer>();
		ArrayList<Integer> ids = new ArrayList<Integer>();
		
		nomes.add(item.getNome());
		marcas.add(WebService.get_marca(Integer.parseInt(item.getMarca())));
		categorias.add(item.getCategoria());
		tamanhos.add(item.getTamanho());
		unidades.add(item.getUnidade_de_medida());
		ids.add(item.getID());
		
		Intent it = new Intent(this, ListaDeResultadosDaBusca.class);
		it.putExtra("username", username);
		it.putExtra("nomes", nomes);
		it.putExtra("marcas", marcas);
		it.putExtra("categorias", categorias);
		it.putExtra("tamanhos", tamanhos);
		it.putExtra("unidades", unidades);
		it.putExtra("ids", ids);
		startActivity(it);
	}
}
